const tagsView = {
    state: {
      visitedViews: [],
      cachedViews: []
    },
    mutations: {
      ADD_VISITED_VIEWS: (state, view) => {
        if (state.visitedViews.some(v => v.fullPath === view.fullPath)) return
        state.visitedViews.push(Object.assign({}, view, {
          title: view.meta.name || 'no-name',
        }))
        
        if (!view.meta.noCache) {
          state.cachedViews.push(view.name)
        }
      },
      DEL_VISITED_VIEWS: (state, view) => {
        for (const [i, v] of state.visitedViews.entries()) {
          if (v.path === view.path) {
            state.visitedViews.splice(i, 1)
            break
          }
        }
        for (const i of state.cachedViews) {
          if (i === view.name) {
            const index = state.cachedViews.indexOf(i)
            state.cachedViews.splice(index, 1)
            break
          }
        }
      },
      DEL_OTHERS_VIEWS: (state, view) => {
        for (const [i, v] of state.visitedViews.entries()) {
          if (v.path === view.path) {
            state.visitedViews = state.visitedViews.slice(i, i + 1)
            break
          }
        }
        for (const i of state.cachedViews) {
          if (i === view.name) {
            const index = state.cachedViews.indexOf(i)
            state.cachedViews = state.cachedViews.slice(index, i + 1)
            break
          }
        }
      },
      DEL_ALL_VIEWS: (state) => {
        state.visitedViews = []
        state.cachedViews = []
      },
      DEL_THIS_VIEWS:(state,view) => {
        for (const [i, v] of state.visitedViews.entries()) {
            
            // if (v.path === view.path) {
            //   state.visitedViews.splice(i, 1)
            //   break
            // }
          }
      }
    },
    actions: {
      addVisitedViews({ commit }, view) {
        commit('ADD_VISITED_VIEWS', view)
      },
      delVisitedViews({ commit, state }, view) {
        return new Promise((resolve) => {
          commit('DEL_VISITED_VIEWS', view)
          resolve([...state.visitedViews])
        })
      },
      delOthersViews({ commit, state }, view) {
        return new Promise((resolve) => {
          commit('DEL_OTHERS_VIEWS', view)
          resolve([...state.visitedViews])
        })
      },
      delAllViews({ commit, state }) {
        return new Promise((resolve) => {
          commit('DEL_ALL_VIEWS')
          resolve([...state.visitedViews])
        })
      },
      delThisViews({commit,state}){
        return new Promise((resolve) => {
            commit('DEL_THIS_VIEWS')
            resolve([...state.visitedViews])
          })
      }
    }
  }
  
  export default tagsView